Problem
Time limit : 3sec / Memory limit : 256MB
题意:
给定$n$个数的数组$A$和数组$B$,求所有$A_i+B_j$的异或和$(1\leq i,j \leq n)$。
$n \leq 200000$。
Solution
首先按位考虑,求所有的$a_i+b_j$中每个数位的xor和。
我们可以想到,如果有两个数x,y,且$0<x,y \leq 2^k$,那么当$0 \leq x+y<2^k$时,$x+y$在$2^k$这一位上的贡献肯定为$0$。
如果$2^{k+1} \leq x+y<2^{k+1}+2^k$,那么$x+y$在$2^k$这一位上的贡献依然为$0$,此时就相当于$x+y$在$2^k$这一位上的贡献被后面的数的进位抹去了。
用在计算答案的第$k$位时,把序列$a,b$中的数的最后$k$位算出来,设为$a’,b’$。
把$b’$排个序,二分找找$a’i+b’j>2^{k-1}$和$2^k \leq a’i+b’j<2^k+2^{k-1}$的方案数,两者相减后判断一下奇偶性。
Code:
1 |
|